import { ElMessage } from 'element-plus'
/**
 * 获取指定范围的随机数
 * @param min
 * @param max
 * @returns
 */
export function getRandomNumBoth(min: number, max: number): number {
  const Range = max - min - 1
  const Rand = Math.random()
  const num = min + Math.round(Rand * Range)
  return num
}

/**
 * 数字转 '00:00'格式
 * @param num
 * @returns
 */
export function setProgress(num: number): string {
  let m: any = Math.floor((num % 3600) / 60)
  let s: any = Math.floor(num % 60)
  m = m < 10 ? '0' + m : m
  s = s < 10 ? '0' + s : s
  return m + ':' + s
}

/**
 * '00:00'格式转数字
 * @param str
 * @returns
 */
export function handleDuration(str: string): number {
  const temp = str.split(':')
  return parseInt(temp[0]) * 60 + parseInt(temp[1])
}

/**
 * 复制文本
 * @param text
 */
export function copyText(text: string) {
  // 创建input标签
  const input = document.createElement('input')
  // 将input的值设置为需要复制的内容
  input.value = text
  // 添加input标签
  document.body.appendChild(input)
  // 选中input标签
  input.select()
  // 执行复制
  document.execCommand('copy')
  // 成功提示信息
  ElMessage({
    message: '复制成功:' + text,
    type: 'success'
  })

  // 移除input标签
  document.body.removeChild(input)
}

export function isValidKey(
  key: string | number | symbol,
  object: object
): key is keyof typeof object {
  return key in object
}

/**
 * 歌词解析
 * @param lrc
 * @param duration
 * @returns
 */
export function analysisLrc(lrc: string, duration: string) {
  interface LRC {
    ti: string
    ar: string
    al: string
    by: string
    offset: number
    ms: { t: number; c: string; transition: number }[]
  }

  const oLRC: LRC = {
    ti: '', // 歌曲名
    ar: '', // 演唱者
    al: '', // 专辑名
    by: '', // 歌词制作人
    offset: 0, // 时间补偿值，单位毫秒，用于调整歌词整体位置
    ms: [] // 歌词数组{t:时间,c:歌词}
  }
  if (lrc.length === 0) return oLRC
  const lrcs = lrc.split('\n') // 用回车拆分成数组
  for (const i in lrcs) {
    // 遍历歌词数组
    lrcs[i] = lrcs[i].replace(/(^\s*)|(\s*$)/g, '') // 去除前后空格
    const t = lrcs[i].substring(lrcs[i].indexOf('[') + 1, lrcs[i].indexOf(']')) // 取[]间的内容
    const s = t.split(':') // 分离:前后文字
    if (isNaN(parseInt(s[0]))) {
      // 不是数值
      for (const i in oLRC) {
        if (i !== 'ms' && i === s[0].toLowerCase()) {
          // if (isValidKey(i, oLRC))
          oLRC[i] = s[1]
        }
      }
    } else {
      // 是数值
      const arr: any = lrcs[i].match(/\[(\d+:.+?)\]/g) // 提取时间字段，可能有多个
      let start = 0
      for (const k in arr) {
        start += arr[k].length // 计算歌词位置
      }
      const content = lrcs[i].substring(start) // 获取歌词内容
      for (const k in arr) {
        const t = arr[k].substring(1, arr[k].length - 1) // 取[]间的内容
        const s = t.split(':') // 分离:前后文字
        if (content) {
          oLRC.ms.push({
            // 对象{t:时间,c:歌词}加入ms数组
            t: parseFloat((parseFloat(s[0]) * 60 + parseFloat(s[1])).toFixed(3)),
            c: content
          })
        }
      }
    }
  }
  oLRC.ms.sort((a: any, b: any) => a.t - b.t)

  // 对每一句歌词的过渡效果时间进行计算
  oLRC.ms.forEach((item: any, index: number) => {
    if (index === oLRC.ms.length - 1) {
      item.transition = parseFloat((handleDuration(duration) - item.t).toFixed(2))
    } else {
      item.transition = parseFloat((oLRC.ms[index + 1].t - item.t).toFixed(2))
    }
  })

  console.log(oLRC)
  return oLRC
}
